#ifndef __CBB_INIT_H__
#define __CBB_INIT_H__

/**
 * @brief ld文件中初始化段定义
 *
 * @code{.ld}
 * .init :
 *  {
 *    KEEP(*(SORT_BY_NAME(.init.*)))
 *  } > FLASH
*/

// 初始化函数定义
typedef void (*init_func_t)(void);

// 注册初始化函数 -- 优先级从高到低
#define INIT_PORT_BSP(func)     const init_func_t init_##func __attribute__((used, section(".init.1"))) = func
#define INIT_PORT_DEVICE(func)  const init_func_t init_##func __attribute__((used, section(".init.2"))) = func
#define INIT_PORT_TASK(func)    const init_func_t init_##func __attribute__((used, section(".init.3"))) = func
#define INIT_PORT_OTHERS(func)  const init_func_t init_##func __attribute__((used, section(".init.4"))) = func

/**
 * @brief 系统初始化函数
 */
void cbb_system_init(void);

#endif /* __CBB_INIT_H__ */
